package bin_tree.leetcode;

/**
 * @author shkstart
 * 判断一颗树是另外一个的子树
 * @create 2022-10-17-16:00
 */
public class Num572 {
    public boolean Num572(TreeNode root, TreeNode subRoot) {

//        1.边界
        if(root==null&&subRoot==null){
            return true;
        }
        if(root == null||subRoot==null){
            return false;
        }

//        判断root.left是否包含sub或者root.right是否包含sub或者是否相同
        return isSameTree(root,subRoot)||Num572(root.left, subRoot) || Num572(root.right, subRoot);

    }


        public boolean isSameTree(TreeNode p, TreeNode q) {
            if(p==null&&q==null){
                return true;
            }
//        if(p!=null&&q==null)return false;
//        if(q!=null&&p==null)return false;

//        排除两个都为空的可能，会在第十行结束
            if(p==null||q==null){

                return false;
            }
            if(p.val != q.val){
                return false;
            }
            return isSameTree(q.left,p.left)&&isSameTree(q.right,p.right);
        }

}
